package com.cloudfast.channel;

import java.util.Properties;

import com.cloudfast.config.property.c.DefaultProperty;
import org.apache.commons.lang3.StringUtils;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;

/**
 * sftp连接附件服务器辅助类
 *
 * @author lyw
 */
public class SFTPChannel {

    /**
     * 连接ftp服务器的会话
     */
    private Session session;
    /**
     * 连接ftp服务器的通道
     */
    private Channel channel;

    /**
     * sftp获取连接通道
     *
     * @param defaultProperty 连接配置信息
     * @param timeout         会话超时时间
     * @return 文件通道
     * @throws JSchException 构件内部异常
     */
    public ChannelSftp getChannel(DefaultProperty defaultProperty, int timeout) throws JSchException {

        String ftpHost = defaultProperty.getHost();
        int port = Integer.parseInt(defaultProperty.getPort());
        String ftpUserName = defaultProperty.getUsername();
        String ftpPassword = defaultProperty.getPassword();
        // 创建JSch对象
        JSch jsch = new JSch();
        // 根据用户名，主机ip，端口获取一个Session对象
        session = jsch.getSession(ftpUserName, ftpHost, port);

        if (StringUtils.isNotEmpty(ftpPassword)) {
            // 设置密码
            session.setPassword(ftpPassword);
        }
        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        // 为Session对象设置properties
        session.setConfig(config);
        // 设置timeout时间
        session.setTimeout(timeout);
        // 通过Session建立链接
        session.connect();
        // 打开SFTP通道
        channel = session.openChannel("sftp");
        // 建立SFTP通道的连接
        channel.connect();

        return (ChannelSftp) channel;
    }

    /**
     * 关闭输送管道及会话
     */
    public void closeChannel() {
        if (channel != null && channel.isConnected()) {
            channel.disconnect();
        }
        if (session != null && session.isConnected()) {
            session.disconnect();
        }
    }
}
